const ctxutil = require('ym_ctx_util');
const Joi = require("joi");
/**
 * @description:  创建投放单信息
 * @param {object} ctx 上下文
 * @param {string} name 投放单名称
 * @param {string} appUrl 投放地址
 * @param {string} appId 小程序Id
 * @param {string} startTime 开始时间
 * @param {string} endTime 结束时间
 * @param {string} state 0 结束投放 1正在投放
 * @param {string} default_state 默认投放地址 1默认  0不默认
 * @param {string} is_delete 是否删除
 * @param {string} create_date 创建时间
 * @param {string} update_date 修改时间
 * @return {*}
 * @author: ljr
 */
exports.savePutInfo = async (ctx) => {
    await ctxutil.apply(ctx);
    const { data:{name,appUrl,appId,startTime,endTime} } = ctx;
    if (JSON.stringify(ctx.data) == "{}") {
        return await ctx.mfutil.common.basicode(7000, {}, 'data 不能为空');
    };
    try {
        let result = await ctx.mfutil.db.mongo.insertOne('put_url', {
            name,
            appUrl,
            appId,
            startTime,
            endTime,
            state: "1",
            default_state: "0",
            is_delete: "0",
            create_date: await ctx.mfutil.common.curentTime(),
            update_date: await ctx.mfutil.common.curentTime(),
        });
        console.log("put_url~~~~~~~~~~~~~", result);
        await ctx.mfutil.logger.info(`创建投放单：${JSON.stringify(result)}`);
        return await ctx.mfutil.common.basicode(0, result);
    } catch (e) {
        console.log("eeeeee",e)
        return await ctx.mfutil.common.basicode(e.code || 8000, e);
    }
};

//删除投放计划
exports.deletePutUrl = async (ctx) => {
    await ctxutil.apply(ctx);
    const { data: { id } } = ctx;
    try {
        let res = await ctx.mfutil.db.mongo.updateMany('put_url', { _id: id }, { $set:  {
            is_delete: "1",
            update_date: await ctx.mfutil.common.curentTime(),
        }});
        return await ctx.mfutil.common.basicode(0, res);
    } catch (e) {
        return await ctx.mfutil.common.basicode(e.code || 8000, e);
    }
};

//设置默认投放地址
exports.setDefaultPutUrl = async (ctx) => {
    await ctxutil.apply(ctx);
    const { data: { id } } = ctx;
    try {
        await ctx.mfutil.db.mongo.updateMany('put_url', {_id:{$ne:id}}, {$set:{default_state: "0"}});

        let res = await ctx.mfutil.db.mongo.updateMany('put_url', {_id:id}, { $set: {
            "default_state": "1",
            "update_date": await ctx.mfutil.common.curentTime(),
        } });

        console.log("res=====",res);

        return await ctx.mfutil.common.basicode(0, res);
    } catch (e) {
        return await ctx.mfutil.common.basicode(e.code || 8000, e);
    }
};

//分页查询投放商品信息
exports.pageList = async (ctx) => {
    // 初始化
    await ctxutil.apply(ctx);
    try {
        const schema = Joi.object().keys({
            page: Joi.number().required(),    //  页码
            pagesize: Joi.number().required(), //  每页数量
            select_name:Joi.string()
        });

        let validate = schema.validate(ctx.data);
        if (validate.error) {
            return await ctx.mfutil.common.basicode(7000, {}, validate);
        }
        let filter = {
            is_delete: { $eq: "0" }
        };

        if (ctx.data.select_name && JSON.stringify(ctx.data) !== '{}') {
            filter.name = { $regex: ctx.data.select_name, $options: "$i" }
        }

        // 手镯查询
        const total = await ctx.cloud.db.collection("put_url").count(filter);


        if (!total) return await ctx.mfutil.common.basicode(0, { total: total, list: [] });

        let num = ctx.data.pagesize * (ctx.data.page - 1);
        const res = await ctx.cloud.db.collection("put_url").find(filter,
            {
                sort: { "default_state": -1 },
                limit: ctx.data.pagesize,
                skip: num,
            }
        );
        return await ctx.mfutil.common.basicode(0, { total: total, list: res });
    } catch (e) {
        return await ctx.mfutil.common.basicode(e.code || 8000, e);
    }
}

//获取有效的投放地址  开始时间小于等于当前时间   结束时间大于当前时间,并且state为1 正在投放
exports.effectivity = async (ctx) => {
    // 初始化
    await ctxutil.apply(ctx);
    try {
        const res = await ctx.cloud.db.collection("put_url").find(
            {
                startTime: { $lte: await ctx.mfutil.common.curentTime() },
                endTime: { $gt: await ctx.mfutil.common.curentTime() },
                state: { $eq: "1" },
            },
        );
        return await ctx.mfutil.common.basicode(0, { list: res });
    } catch (e) {
        return await ctx.mfutil.common.basicode(e.code || 8000, e);
    }
}


